package pe.gob.foncodes.ssa.bs.common.util;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

public class DateHelper {

    public static Date getFechaActual() {
        Calendar calendar = new GregorianCalendar();
        return calendar.getTime();
    }

    /**
     * Obtiene la dieferencia en Dias entr dos fechas 
     */
    public static double fechasDiferenciaEnDias(Date fechaFinal, Date fechaInicial) {
        GregorianCalendar ci = new GregorianCalendar();
        if (fechaInicial != null) {
            ci.setTime(fechaInicial);
        } else {
            ci.setTime(Constante.FECHA_INICIO);
        }
        GregorianCalendar cf = new GregorianCalendar();;
        cf.setTime(fechaFinal);
        double from = ci.getTime().getTime();
        double to = cf.getTime().getTime();
        double difference = to - from;
        double days = difference / (1000 * 60 * 60 * 24);
        return days;
    }

    public static String StringToDate(Date fecha, String formato) {
        Locale locale = new Locale("es");
        DateFormat df = new SimpleDateFormat(formato, locale);
        String sfecha = "";
        try {
            sfecha = df.format(fecha);
        } catch (Exception e) {
        }
        return sfecha;
    }

    public static boolean EsFechaFinalDelMes(Date fecha) {
        boolean success = false;
        Date fechaIni = fecha;
        int mesIni = fechaIni.getMonth();
        fechaIni.setDate(fechaIni.getDate() + 1);
        int mesFin = fechaIni.getMonth();
        if (mesIni == mesFin) {
            success = false;
        } else {
            success = true;
        }
        return success;
    }

    public int obtenerSemana(String fecha) {
        SimpleDateFormat dateformato = new SimpleDateFormat("MM/dd/yyyy");
        Date date = null;
        try {
            date = dateformato.parse(fecha);
        } catch (Exception e) {
        }

        Calendar calendario = Calendar.getInstance();
        calendario.setTime(date);
        System.out.println("Semana: " + calendario.get(Calendar.WEEK_OF_YEAR));
        System.out.println("Ao: " + calendario.get(Calendar.YEAR));
        System.out.println("Fecha: " + calendario.getTime());

        return calendario.get(Calendar.WEEK_OF_YEAR);
    }

    public synchronized boolean MostrarFecha(String fechaInicio, String fechaFin) {
        boolean b = false;
        SimpleDateFormat dateformato = new SimpleDateFormat("MM/dd/yyyy");
        Date dateIni = null;
        Date dateFin = null;
        try {
            dateIni = dateformato.parse(fechaInicio);
            dateFin = dateformato.parse(fechaFin);
        } catch (Exception e) {
        }

        Calendar calendarioIni = Calendar.getInstance();
        calendarioIni.setTime(dateIni);
        int semanaFechIni = calendarioIni.get(Calendar.WEEK_OF_YEAR);
        int anoFechIni = calendarioIni.get(Calendar.YEAR);

        Calendar calendarioFin = Calendar.getInstance();
        calendarioFin.setTime(dateFin);
        int semanaFechFin = calendarioFin.get(Calendar.WEEK_OF_YEAR);
        int anoFechFin = calendarioFin.get(Calendar.YEAR);

        if (anoFechIni == anoFechFin) {
            if (semanaFechIni == semanaFechFin) {
                b = true;
            }
        }
        return b;
    }
    
    public static boolean EsFechaValida(String fecha, String formato) {
        boolean valid;

        try {
            DateFormat df = new SimpleDateFormat(formato);
            df.setLenient(false);
            df.parse(fecha);
            valid = true;
        } catch (Exception e) {
            valid = false;
        }
        return valid;
    }    
}
